Software testing is an element of software development processes. A purpose of testing is to ensure that code changes applied to a software product do not compromise product quality. Often, testing is associated with checking for functional correctness. However, for large complex software systems, it also typically involves verifying system constraints, such as backward compatibility, performance, security, etc.